const { contextBridge, ipcRenderer } = require("electron");
const os = require("os");
const path = require("path");
const fs = require("fs");

// 设置事件监听，将主进程的消息转发到渲染进程
ipcRenderer.on("message-received", (event, message) => {
  // 创建自定义事件并分发到窗口
  const customEvent = new CustomEvent("message-received", { detail: message });
  window.dispatchEvent(customEvent);
});

ipcRenderer.on("error-occurred", (event, error) => {
  // 创建自定义事件并分发到窗口
  const customEvent = new CustomEvent("error_occurred", { detail: error });
  window.dispatchEvent(customEvent);
});

// 添加对主进程日志消息的处理
ipcRenderer.on("log-message", (event, message) => {
  // 创建自定义事件并分发到窗口
  const customEvent = new CustomEvent("log-message", { detail: message });
  window.dispatchEvent(customEvent);
});

// 添加对登录状态更新的处理
ipcRenderer.on("login-status-update", (event, status) => {
  // 创建自定义事件并分发到窗口
  const customEvent = new CustomEvent("login-status-update", {
    detail: status,
  });
  window.dispatchEvent(customEvent);
});

// 注入错误和输出事件
ipcRenderer.on("injection-error", (event, data) => {
  const customEvent = new CustomEvent("injection-error", { detail: data });
  window.dispatchEvent(customEvent);
});

ipcRenderer.on("injection-output", (event, data) => {
  const customEvent = new CustomEvent("injection-output", { detail: data });
  window.dispatchEvent(customEvent);
});

// 暴露 IPC 通信方法给渲染进程
contextBridge.exposeInMainWorld("electronAPI", {
  // 获取操作系统信息
  getOsInfo: () => {
    return os.platform();
  },

  // 获取资源路径
  getResourcesPath: () => {
    return ipcRenderer.invoke("get-resources-path");
  },

  // 获取注入工具路径
  getInjectToolPath: () => {
    // 这里不再自己计算路径，而是调用主进程的方法
    // 主进程会尝试多个可能的路径并返回正确的路径
    return ipcRenderer.invoke("get-inject-tool-path");
  },

  // 检查文件是否存在
  checkFileExists: (filePath) => {
    return ipcRenderer.invoke("check-file-exists", filePath);
  },

  // 检查微信版本 - 不再需要，注释掉
  /*
  checkWeChatVersion: () => {
    return ipcRenderer.invoke("check-wechat-version");
  },

  // 安装微信 - 不再需要，注释掉
  installWeChat: (options) => {
    return ipcRenderer.invoke("install-wechat", options);
  },
  */

  // 注入微信
  injectWeChat: (options) => {
    return ipcRenderer.invoke("inject-wechat", options);
  },

  // 开始监听消息
  startListening: (options) => {
    return ipcRenderer.invoke("start-listening", options);
  },

  // 停止监听消息
  stopListening: () => {
    return ipcRenderer.invoke("stop-listening");
  },

  // 选择文件
  selectFile: (options) => ipcRenderer.invoke("select-file", options),

  // 获取当前工作目录
  getCurrentDir: () => ipcRenderer.invoke("get-current-dir"),

  // 监听注入错误事件
  onInjectionError: (callback) => {
    const subscription = (event, data) => callback(data);
    ipcRenderer.on("injection-error", subscription);
    return () => {
      ipcRenderer.removeListener("injection-error", subscription);
    };
  },

  // 监听注入输出事件
  onInjectionOutput: (callback) => {
    const subscription = (event, data) => callback(data);
    ipcRenderer.on("injection-output", subscription);
    return () => {
      ipcRenderer.removeListener("injection-output", subscription);
    };
  },

  // 打开URL
  openUrl: (url) => ipcRenderer.invoke("open-url", url),

  // 检查微信登录状态（不使用API接口）
  checkWeChatLoginStatus: () => {
    return ipcRenderer.invoke("check-wechat-login-status");
  },

  // 打开开发者工具
  openDevTools: () => ipcRenderer.invoke("open-dev-tools"),

  // 监听端口更新事件
  onPortUpdate: (callback) => {
    const subscription = (event, data) => callback(data);
    ipcRenderer.on("port-update", subscription);
    return () => {
      ipcRenderer.removeListener("port-update", subscription);
    };
  },
});
